home *** CD-ROM | disk | FTP | other *** search
/ CD ROM Paradise Collection 4 / CD ROM Paradise Collection 4 1995 Nov.iso / program / swagd_f.zip / DRIVES.SWG / 0084_Available Drive Lister.pas < prev    next >
Pascal/Delphi Source File  |  1995-03-03  |  3KB  |  119 lines

  1. {
  2. > What I need is a routine that will give back the letters of the active
  3. > drives on a system.  Can anyone help me.
  4. }
  5. Program ListAvailableDrives;
  6. (*
  7.   Public Domain, (c) 1994 by Andrew Eigus   Fidonet: 2:5100/33 }
  8.   These routines are taken from my EnhDOS unit where are lot of useful
  9.   stuff.
  10.  
  11.   MATERIAL RELEASED FOR SWAG
  12. *)
  13.  
  14. const
  15.   { GetDriveType return values }
  16.  
  17.   dtError      = $00; { Bad drive }
  18.   dtFixed      = $01; { Fixed drive }
  19.   dtRemovable  = $02; { Removable (floppy) drive }
  20.   dtRemote     = $03; { Remote (network) drive }
  21.   dtCDROM      = $04; { CD-ROM V2.00+ drive }
  22.   dtDblSpace   = $05; { DoubleSpace compressed drive }
  23.  
  24. Function GetDriveType(Drive : byte) : byte; assembler;
  25. { 0=current (default) drive,1=A,2=B,3=C... }
  26. Asm
  27.   cmp Drive,0
  28.   jne @@1
  29.   mov ah,19h
  30.   int 21h
  31.   mov Drive,al
  32.   inc Drive
  33. @@1:
  34.   mov ax,1500h
  35.   xor bx,bx
  36.   int 2Fh
  37.   or  bx,0      { works with CD-ROM v2.00+ }
  38.   jz  @@2
  39.   mov ax,150Bh
  40.   xor ch,ch
  41.   mov cl,Drive
  42.   int 2Fh
  43.   cmp bx,0ADADh
  44.   jne @@2
  45.   or  ax,0
  46.   jz  @@2
  47.   mov bl,dtCDROM
  48.   jmp @@7
  49. @@2:
  50.   mov ax,4A11h
  51.   mov bx,1
  52.   mov dl,Drive
  53.   dec dl
  54.   int 2Fh
  55.   xor cl,cl     { mov cl,False }
  56.   or  ax,0      { is DoubleSpace loaded? }
  57.   jnz @@3
  58.   cmp dl,bl     { if a host drive equal to compressed, then get out... }
  59.   je  @@3
  60.   test bl,10000000b { bit 7=1: DL=compressed,BL=host
  61.                            =0: DL=host,BL=compressed }
  62.   jz  @@3       { so avoid host drives, assume host=fixed :) }
  63.   inc dl
  64.   cmp Drive,dl
  65.   jne @@3
  66.   mov bl,dtDblSpace
  67.   jmp @@7
  68. @@3:
  69.   mov ax,4409h
  70.   mov bl,Drive
  71.   int 21h
  72.   jc  @@5
  73.   or  al,False
  74.   jz  @@4
  75.   mov bl,dtRemote
  76.   jmp @@7
  77. @@4:
  78.   mov ax,4408h
  79.   mov bl,Drive
  80.   int 21h
  81.   jc  @@5
  82.   or  al,False
  83.   jz  @@6
  84.   mov bl,dtFixed
  85.   jmp @@7
  86. @@5:
  87.   xor bl,bl     { mov bl,dtError cuz dtError=0 }
  88.   jmp @@7
  89. @@6:
  90.   mov bl,dtRemovable
  91. @@7:
  92.   mov al,bl
  93. End; { GetDriveType }
  94.  
  95. var
  96.   Drive : byte;
  97.   DriveType : byte;
  98.  
  99. Begin
  100.   WriteLn(#13#10'Drives available:');
  101.   WriteLn('-----------------------------');
  102.   for Drive := (Ord('A') - Ord('A') + 1) to (Ord('Z') - Ord('A') + 1) do
  103.   begin
  104.     DriveType := GetDriveType(Drive);
  105.     if DriveType <> dtError then
  106.     begin
  107.       Write('Drive ', Chr(Drive + Ord('A') - 1), ': ');
  108.       case DriveType of
  109.         dtRemovable: WriteLn('Removable (floppy)');
  110.         dtFixed: WriteLn('Fixed (hard disk)');
  111.         dtRemote: WriteLn('Remote (network)');
  112.         dtCDROM: WriteLn('CD-ROM');
  113.         dtDblSpace: WriteLn('DoubleSpace')
  114.       end
  115.     end
  116.   end;
  117.   WriteLn('-----------------------------')
  118. End.
  119.